package com.cast.s3p.controladores;

import com.cast.s3p.persistencia.Departamento;
import com.cast.s3p.persistencia.Empleado;
import com.cast.s3p.persistencia.Evaluador;
import com.cast.s3p.persistencia.Usuarios;
import java.io.IOException;
import java.util.TreeMap;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Select3Proyect
 * Univalle - Desarrollo de Software II
 *
 * ((Creador && Mantenedor) == Spider)
 * E-Mail == cadiraca@gmail.com
 *
 * Clase que extiende de Servlet se usará para redirigir las solicitudes de los
 * Usuarios de la apliación hacia los diferentes recursos existentes, adicional
 * de crear las sesiones de usuario y capturar datos.
 *
 * ChibchASoft 2011, Licencia GPL
 */



public class s3p extends HttpServlet{
    Precioso gollumGL;
    ServletContext contextoGL;
    RequestDispatcher despachadorGL;

    @Override
    public void init(ServletConfig config) throws ServletException{
        super.init(config);
        this.gollumGL = new Precioso();
        this.contextoGL = config.getServletContext();
    }

    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        this.procesarSolicitud(request, response);
    }


    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        this.procesarSolicitud(request, response);
    }


    public void procesarSolicitud(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        response.setCharacterEncoding("UTF-8");
        String accion = request.getParameter("accion");

        //Condición que inicia los recursos del Servlet
        if(accion.equals("inicial")){
            this.despachadorGL = (RequestDispatcher)this.contextoGL.getRequestDispatcher("/ingresar.jsp");
        }

        //Condición que maneja el ingreso al sistema
        if(accion.equals("ingresar")){
            this.validarUsuario(request, response);
        }

        if(accion.equals("registrarProyecto")){
            HttpSession sesionActiva = request.getSession();
            this.despachadorGL = (RequestDispatcher)this.contextoGL.getRequestDispatcher("/registrarProyecto.jsp");
        }
        
        //Condicion para registrar usuario
        if(accion.equals("registrarUsuario")){
            HttpSession sesionActiva = request.getSession();
            this.despachadorGL = (RequestDispatcher)this.contextoGL.getRequestDispatcher("/usuarios/registrarUsuario.jsp");
        }
        
        //Condicion para modificar usuario
        if(accion.equals("modificarUsuario")){
            HttpSession sesionActiva = request.getSession();
            this.despachadorGL = (RequestDispatcher)this.contextoGL.getRequestDispatcher("/usuarios/modificarUsuario.jsp");
        }
        //Condicion para buscar usuario
        if(accion.equals("buscarUsuario")){
            HttpSession sesionActiva = request.getSession();
            this.despachadorGL = (RequestDispatcher)this.contextoGL.getRequestDispatcher("/usuarios/buscarUsuario.jsp");
        }
        //Condicion para pantalla registrar departamento
        if(accion.equals("registrarDepartamento")){
            HttpSession sesionActiva = request.getSession();
            this.despachadorGL = (RequestDispatcher)this.contextoGL.getRequestDispatcher("/departamento/registrarDepartamento.jsp");
            TreeMap listaDirectores =this.gollumGL.generarListadoDeDirectores();
            sesionActiva.setAttribute("listaDirectores", listaDirectores.get(0));
        }
        //Condicion para pantalla modificar departamento
        if(accion.equals("modificarDepartamento")){
            HttpSession sesionActiva = request.getSession();
            this.despachadorGL = (RequestDispatcher)this.contextoGL.getRequestDispatcher("/departamento/modificarDepartamento.jsp");
        }
         //Condicion para crear departamento
        if(accion.equals("crearDepartamento")){
            this.registrarDepartamento(request, response);
        }
        
        //Condicion para crear departamento
        if(accion.equals("editarDepartamento")){
           request.setAttribute("Error", "1");
        }
        

        

        this.despachadorGL.forward(request, response);
        
    }


    public void validarUsuario(HttpServletRequest request, HttpServletResponse response){
        String nombreUsuario = request.getParameter("username");
        String passwordUsuario = request.getParameter("password");

        if(nombreUsuario.equals("") || passwordUsuario.equals("")){
            request.setAttribute("Error", "1");
            this.despachadorGL = (RequestDispatcher)this.contextoGL.getRequestDispatcher("/ingresar.jsp");
        } else {
            Usuarios aValidar = new Usuarios();
            aValidar.setNombreusuario(nombreUsuario);
            aValidar.setPassword(passwordUsuario);
            TreeMap xValidaUsuario = this.gollumGL.validaUsuario(aValidar, request.getParameter("accion"));

            if(xValidaUsuario.size() > 1){
                HttpSession sesionActiva = request.getSession();
                sesionActiva.setAttribute("Precioso", this.gollumGL);

                if(xValidaUsuario.get(0).getClass() == Empleado.class){
                    Empleado empleado = (Empleado)xValidaUsuario.get(0);
                    sesionActiva.setAttribute("usuarioActivo", empleado);
                    sesionActiva.setAttribute("opcionesUsuario", xValidaUsuario.get(1));
                    request.setAttribute("tipoUsuario", "1");
                    this.despachadorGL = (RequestDispatcher)this.contextoGL.getRequestDispatcher("/menuIngreso.jsp");
                } else {
                    Evaluador evaluador = (Evaluador)xValidaUsuario.get(0);
                    sesionActiva.setAttribute("usuarioActivo", evaluador);
                    sesionActiva.setAttribute("opcionesUsuario", xValidaUsuario.get(1));
                    request.setAttribute("tipoUsuario", "2");
                    this.despachadorGL = (RequestDispatcher)this.contextoGL.getRequestDispatcher("/menuIngreso.jsp");
                }
            } else {
                request.setAttribute("Error", "2");
                this.despachadorGL = (RequestDispatcher)this.contextoGL.getRequestDispatcher("/ingresar.jsp");
            }

       }

    }
    
    public void registrarDepartamento(HttpServletRequest request, HttpServletResponse response)
    {
        String nombreDepartamento = request.getParameter("nombre");
        String descripcion = request.getParameter("descripcion");
        String codigoDirector = request.getParameter("codirector");
        String presupuesto = request.getParameter("presupuesto");
        String centroCosto = request.getParameter("centrodecosto");
        String codigoDepartamento = request.getParameter("codepartamento");
        
        if(nombreDepartamento.equals("") || codigoDirector.equals("")){
            request.setAttribute("Error", "1");
            this.despachadorGL = (RequestDispatcher)this.contextoGL.getRequestDispatcher("/departamento/registrarDepartamento.jsp");
        }else {
            Departamento departamento = new Departamento();
            departamento.setNombre(nombreDepartamento);
            departamento.setCodigo(codigoDepartamento);
            departamento.setDirector(this.gollumGL.buscarEmpleado(codigoDirector));
            departamento.setDescripcion(descripcion);
            departamento.setPresupuesto(Integer.parseInt(presupuesto));
            departamento.setCentrodecosto(centroCosto);
            request.setAttribute("Error", this.gollumGL.registrarDepartamento(departamento));

            
       }
    }

}
